/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with this
 * work for additional information regarding copyright ownership. The ASF
 * licenses this file to You under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
 * or agreed to in writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package top.shaozuo.simple.mybatis.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.security.auth.login.Configuration;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.type.TypeHandler;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Import;
import org.springframework.core.annotation.AliasFor;

/**
 * 激活 MyBatis
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Inherited
@MapperScan
@Import(MybatisBeanDefinitionRegistrar.class)
public @interface EnableMybatis {

	/**
	 * @return the bean name of {@link SqlSessionFactoryBean}
	 */
	String value() default "sqlSessionFactoryBean";

	/**
	 * @return DataSource bean name
	 */
	String dataSource();

	/**
	 * the location of {@link Configuration}
	 *
	 * @return
	 */
	String configLocation();

	/**
	 * @return the location of {@link Mapper}
	 * @see MapperScan
	 */
	String[] mapperLocations() default {};

	String environment() default "SqlSessionFactoryBean";

	/**
	 * typeHandlersPackage
	 * 
	 * @see TypeHandler
	 * @return
	 */
	String typeHandlersPackage() default "";

	@AliasFor(annotation = MapperScan.class)
	String[] basePackages() default {};

}
